Fix incorrect re-enablement of interrupts (found by Tristan Gingold)
authordjm@kirby.fc.hp.com <djm@kirby.fc.hp.com>
Fri, 7 Oct 2005 15:37:41 +0000 (09:37 -0600)
committerdjm@kirby.fc.hp.com <djm@kirby.fc.hp.com>
Fri, 7 Oct 2005 15:37:41 +0000 (09:37 -0600)
xen/arch/ia64/xen/vcpu.c

index c79fcb7df1ed8f318dc8f4039dc0c7f4533131ef..769892b2b4f214ab7185b03ade29f6364bf055d8 100644 (file)
@@ -1043,9 +1043,10 @@ BOOLEAN vcpu_timer_expired(VCPU *vcpu)
 void vcpu_safe_set_itm(unsigned long val)
 {
        unsigned long epsilon = 100;
+       unsigned long flags;
        UINT64 now = ia64_get_itc();
 
-       local_irq_disable();
+       local_irq_save(flags);
        while (1) {
 //printf("*** vcpu_safe_set_itm: Setting itm to %lx, itc=%lx\n",val,now);
                ia64_set_itm(val);
@@ -1053,7 +1054,7 @@ void vcpu_safe_set_itm(unsigned long val)
                val = now + epsilon;
                epsilon <<= 1;
        }
-       local_irq_enable();
+       local_irq_restore(flags);
 }
 
 void vcpu_set_next_timer(VCPU *vcpu)